package py.com.alfa.escriba.gui.controller.object.admin;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import org.springframework.context.ApplicationContext;

import py.com.alfa.escriba.gui.config.EscribaGUIApplicationContextProvider;
import py.com.alfa.escriba.gui.controller.view.Permissions;
import py.com.alfa.escriba.gui.controller.view.View;
import py.com.alfa.escriba.gui.controller.view.ViewManager;
import py.com.alfa.escriba.gui.controller.view.admin.ControlesViewContext;
import py.com.alfa.escriba.gui.controller.view.admin.ControlesViewFragment;
import py.com.alfa.escriba.gui.dto.admin.ControlesEscriturasDTO;
import py.com.alfa.escriba.gui.dto.admin.ControlesFormulariosInfoDTO;
import py.com.alfa.escriba.gui.dto.admin.ControlesInfoDTO;
import py.com.alfa.escriba.gui.dto.admin.ControlesInmueblesInfoDTO;
import py.com.alfa.escriba.gui.dto.admin.ControlesNaturalezasInfoDTO;
import py.com.alfa.escriba.gui.dto.admin.ControlesPersonasInfoDTO;
import py.com.alfa.escriba.gui.dto.admin.ControlesVehiculosInfoDTO;
import py.com.alfa.escriba.gui.dto.admin.ControlesseguimientoDTO;
import py.com.alfa.escriba.gui.dto.admin.ControlestextoDTO;
import py.com.alfa.escriba.gui.dto.admin.DepartamentoDTO;
import py.com.alfa.escriba.gui.dto.admin.DistritoDTO;
import py.com.alfa.escriba.gui.dto.admin.FormulariosDTO;
import py.com.alfa.escriba.gui.dto.admin.NaturalezasDTO;
import py.com.alfa.escriba.gui.dto.admin.PaisDTO;
import py.com.alfa.escriba.gui.dto.admin.TabRefDTO;
import py.com.alfa.escriba.gui.dto.gestion.InmueblesDTO;
import py.com.alfa.escriba.gui.dto.gestion.MonedasDTO;
import py.com.alfa.escriba.gui.dto.gestion.TemplatesDTO;
import py.com.alfa.escriba.gui.dto.gestion.VehiculosDTO;
import py.com.alfa.escriba.gui.dto.query.ControlesQueryDTO;
import py.com.alfa.escriba.gui.dto.query.ControlesRequestDTO;
import py.com.alfa.escriba.gui.services.Services;



public class ControlesControllerObject {
	
	private List<ControlesRequestDTO> controles;
	private ControlesInfoDTO control;
	private ControlesQueryDTO filtros;
	
	//referencia
	private List<TabRefDTO> estadosControl;
	private List<TabRefDTO> rolesEscribano;
	private List<PaisDTO> paises;
	private List<TabRefDTO> tiposDocumento;
	private List<TabRefDTO> estados;
	private List<TabRefDTO> tiposProtocolo;
	private List<TabRefDTO> estadosEscrituras;
	private List<DistritoDTO> distritos;
	private List<DepartamentoDTO> departamentos;
	private DepartamentoDTO departamento;
	
	//detalle del control
	private List<FormulariosDTO> tiposFormularios;
	private ControlesFormulariosInfoDTO formulario;
	
	//naturalezas
	private List<NaturalezasDTO> tiposNaturaleza;
	private List<MonedasDTO> monedas;
	private ControlesNaturalezasInfoDTO naturaleza;
	
	//personas
	private ControlesPersonasInfoDTO persona;
	private boolean ruc;
	
	//vehiculos
	private ControlesVehiculosInfoDTO vehiculo;
	private VehiculosDTO vehiculoBuscar;
	
	//Seguimiento
	private List<ControlesseguimientoDTO> notas;
	private ControlesseguimientoDTO nota;
	
	//Control Escrituras
	private ControlesEscriturasDTO controlEscritura;
	private List<ControlesEscriturasDTO> ordenCronologico;
	private TabRefDTO estadoPreEdit;
	
	//inmuebles
	private List<InmueblesDTO> inmuebles;
	private ControlesInmueblesInfoDTO inmueble;
	private InmueblesDTO inmuebleBuscar;
	
	//texto
	private ControlestextoDTO texto;
	private List<TemplatesDTO> templates;
	
	private ViewManager viewManager;
	private String titulo = "";
	
	public ControlesControllerObject() {
		ApplicationContext ctx = EscribaGUIApplicationContextProvider.getContext();
		this.setViewManager((ViewManager) ctx.getBean(Services.VIEW_MANAGER));
		this.getViewManager().registerContext(View.CONTROLES, new ControlesViewContext());
		this.setControles(new ArrayList<ControlesRequestDTO>());
		this.setControl(null);
	}

	public ControlesViewFragment view(){
		return (ControlesViewFragment) this.getContext().getViewFragment();
	}

	public ControlesViewContext getContext(){
		return (ControlesViewContext) getViewManager().getContext(View.CONTROLES);
	}
	
	public Permissions getPermissions(){
		return getViewManager().getPermissions();
	}
	
	public BigDecimal iva(BigDecimal honorario, Double iva) {
		if ( BigDecimal.ZERO.equals(honorario)) {
			return BigDecimal.ZERO;
		}
		if ( iva <= 0.0 ) {
			return BigDecimal.ZERO;
		}
		
		return honorario.multiply(new BigDecimal(iva));
	}
	
	public ViewManager getViewManager() {
		return viewManager;
	}

	public void setViewManager(ViewManager viewManager) {
		this.viewManager = viewManager;
	}

	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	public List<ControlesRequestDTO> getControles() {
		return controles;
	}

	public void setControles(List<ControlesRequestDTO> controles) {
		this.controles = controles;
	}

	public ControlesInfoDTO getControl() {
		if ( this.control == null) {
			this.control = new ControlesInfoDTO();
		}
		return control;
	}

	public void setControl(ControlesInfoDTO control) {
		this.control = control;
	}

	public ControlesQueryDTO getFiltros() {
		return filtros;
	}

	public void setFiltros(ControlesQueryDTO filtros) {
		this.filtros = filtros;
	}

	public ControlesNaturalezasInfoDTO getNaturaleza() {
		return naturaleza;
	}

	public void setNaturaleza(ControlesNaturalezasInfoDTO naturaleza) {
		this.naturaleza = naturaleza;
	}

	public List<TabRefDTO> getEstadosControl() {
		return estadosControl;
	}

	public void setEstadosControl(List<TabRefDTO> estadosControl) {
		this.estadosControl = estadosControl;
	}

	public List<NaturalezasDTO> getTiposNaturaleza() {
		return tiposNaturaleza;
	}

	public void setTiposNaturaleza(List<NaturalezasDTO> tiposNaturaleza) {
		this.tiposNaturaleza = tiposNaturaleza;
	}

	public List<MonedasDTO> getMonedas() {
		return monedas;
	}

	public void setMonedas(List<MonedasDTO> monedas) {
		this.monedas = monedas;
	}

	public ControlesPersonasInfoDTO getPersona() {
		return persona;
	}

	public void setPersona(ControlesPersonasInfoDTO persona) {
		this.persona = persona;
	}

	public List<TabRefDTO> getRolesEscribano() {
		return rolesEscribano;
	}

	public void setRolesEscribano(List<TabRefDTO> rolesEscribano) {
		this.rolesEscribano = rolesEscribano;
	}

	public List<PaisDTO> getPaises() {
		return paises;
	}

	public void setPaises(List<PaisDTO> paises) {
		this.paises = paises;
	}

	public List<TabRefDTO> getTiposDocumento() {
		return tiposDocumento;
	}

	public void setTiposDocumento(List<TabRefDTO> tiposDocumento) {
		this.tiposDocumento = tiposDocumento;
	}

	public boolean isRuc() {
		return ruc;
	}

	public void setRuc(boolean ruc) {
		this.ruc = ruc;
	}

	public List<TabRefDTO> getEstados() {
		return estados;
	}

	public void setEstados(List<TabRefDTO> estados) {
		this.estados = estados;
	}

	public List<TabRefDTO> getTiposProtocolo() {
		return tiposProtocolo;
	}

	public void setTiposProtocolo(List<TabRefDTO> tiposProtocolo) {
		this.tiposProtocolo = tiposProtocolo;
	}

	public ControlesVehiculosInfoDTO getVehiculo() {
		return vehiculo;
	}

	public void setVehiculo(ControlesVehiculosInfoDTO vehiculo) {
		this.vehiculo = vehiculo;
	}

	public VehiculosDTO getVehiculoBuscar() {
		return vehiculoBuscar;
	}

	public void setVehiculoBuscar(VehiculosDTO vehiculoBuscar) {
		this.vehiculoBuscar = vehiculoBuscar;
	}

	public ControlesFormulariosInfoDTO getFormulario() {
		return formulario;
	}

	public void setFormulario(ControlesFormulariosInfoDTO formulario) {
		this.formulario = formulario;
	}


	public List<FormulariosDTO> getTiposFormularios() {
		return tiposFormularios;
	}

	public void setTiposFormularios(List<FormulariosDTO> tiposFormularios) {
		this.tiposFormularios = tiposFormularios;
	}
	public List<ControlesseguimientoDTO> getNotas() {
		return notas;
	}

	public void setNotas(List<ControlesseguimientoDTO> notas) {
		this.notas = notas;
	}

	public ControlesseguimientoDTO getNota() {
		return nota;
	}

	public void setNota(ControlesseguimientoDTO nota) {
		this.nota = nota;
	}

	public ControlesEscriturasDTO getControlEscritura() {
		return controlEscritura;
	}

	public void setControlEscritura(ControlesEscriturasDTO controlEscritura) {
		this.controlEscritura = controlEscritura;
	}

	public List<ControlesEscriturasDTO> getOrdenCronologico() {
		return ordenCronologico;
	}

	public void setOrdenCronologico(List<ControlesEscriturasDTO> ordenCronologico) {
		this.ordenCronologico = ordenCronologico;
	}

	public List<TabRefDTO> getEstadosEscrituras() {
		return estadosEscrituras;
	}

	public void setEstadosEscrituras(List<TabRefDTO> estadosEscrituras) {
		this.estadosEscrituras = estadosEscrituras;
	}

	public TabRefDTO getEstadoPreEdit() {
		return estadoPreEdit;
	}

	public void setEstadoPreEdit(TabRefDTO estadoPreEdit) {
		this.estadoPreEdit = estadoPreEdit;
	}

	public List<InmueblesDTO> getInmuebles() {
		return inmuebles;
	}

	public void setInmuebles(List<InmueblesDTO> inmuebles) {
		this.inmuebles = inmuebles;
	}

	public ControlesInmueblesInfoDTO getInmueble() {
		return inmueble;
	}

	public void setInmueble(ControlesInmueblesInfoDTO inmueble) {
		this.inmueble = inmueble;
	}

	public List<DistritoDTO> getDistritos() {
		return distritos;
	}

	public void setDistritos(List<DistritoDTO> distritos) {
		this.distritos = distritos;
	}

	public List<DepartamentoDTO> getDepartamentos() {
		return departamentos;
	}

	public void setDepartamentos(List<DepartamentoDTO> departamentos) {
		this.departamentos = departamentos;
	}

	public DepartamentoDTO getDepartamento() {
		return departamento;
	}

	public void setDepartamento(DepartamentoDTO departamento) {
		this.departamento = departamento;
	}

	public InmueblesDTO getInmuebleBuscar() {
		return inmuebleBuscar;
	}

	public void setInmuebleBuscar(InmueblesDTO inmuebleBuscar) {
		this.inmuebleBuscar = inmuebleBuscar;
	}

	public ControlestextoDTO getTexto() {
		return texto;
	}

	public void setTexto(ControlestextoDTO texto) {
		this.texto = texto;
	}

	public List<TemplatesDTO> getTemplates() {
		return templates;
	}

	public void setTemplates(List<TemplatesDTO> templates) {
		this.templates = templates;
	}

}
